/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;

//import cip.util.ControladorAbstracto;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.cip.esymons.colegiatura.bc.CitaDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoDelegate;
import org.cip.esymons.colegiatura.bc.PersonaNaturalDelegate;
import org.cip.esymons.colegiatura.bc.PreInscripcionDelegate;
import org.cip.esymons.colegiatura.be.Cita;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.colegiatura.be.EstadoCita;
import org.cip.esymons.colegiatura.be.Preinscripcion;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.util.ControladorAbstracto;


/**
 *
 * @author ADMINISTRADOR
 */
public class citaController {

    private CitaDelegate delegado;
    private PersonaNaturalDelegate delegadoNatural;
    private PreInscripcionDelegate delegadoPre;
    private ColegiadoDelegate delegadoColegiado;

    private Cita cita,cita1;
    private EstadoCita estado;
    private Long codigo;
    private String dni;
    private List listaDisp;

    private Colegiado colegiado;
    private PersonaNatural perNatural,persona;
    private Preinscripcion preinscripcion;
    private boolean mensaje,activo;
    private Date fecha1,fecha2,fechaIni,fechaFin;

    List<Cita> listaPorFechas;
    List<Cita> cita2;
    private Boolean noHallado;


    public citaController() {

         delegado = new CitaDelegate();
         delegadoNatural = new PersonaNaturalDelegate();
         delegadoPre = new PreInscripcionDelegate();
         delegadoColegiado = new ColegiadoDelegate();

         colegiado = new Colegiado();
         perNatural = new PersonaNatural();
         persona = new PersonaNatural();
         preinscripcion = new Preinscripcion();
         cita = new Cita();
         cita1 = new Cita();
         cita2 = new ArrayList<Cita>();
         estado = new EstadoCita();

         mensaje = false;
         activo = false;
         listaPorFechas = new ArrayList<Cita>();
         noHallado = false;

    }

    public Boolean getNoHallado() {
        return noHallado;
    }

    public void setNoHallado(Boolean noHallado) {
        this.noHallado = noHallado;
    }

    public boolean getActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public PersonaNatural getPersona() {
        return persona;
    }

    public void setPersona(PersonaNatural persona) {
        this.persona = persona;
    }

    public Colegiado getColegiado() {
        return colegiado;
    }

    public void setColegiado(Colegiado colegiado) {
        this.colegiado = colegiado;
    }

    public ColegiadoDelegate getDelegadoColegiado() {
        return delegadoColegiado;
    }

    public void setDelegadoColegiado(ColegiadoDelegate delegadoColegiado) {
        this.delegadoColegiado = delegadoColegiado;
    }

    public List<Cita> getCita2() {
        return cita2;
    }

    public void setCita2(List<Cita> cita2) {
        this.cita2 = cita2;
    }


    public List<Cita> getListaPorFechas() {
        return listaPorFechas;
    }

    public void setListaPorFechas(List<Cita> listaPorFechas) {
        this.listaPorFechas = listaPorFechas;
    }

    public Date getFecha1() {
        return fecha1;
    }

    public void setFecha1(Date fecha1) {
        this.fecha1 = fecha1;
    }

    public Date getFecha2() {
        return fecha2;
    }

    public void setFecha2(Date fecha2) {
        this.fecha2 = fecha2;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public Date getFechaIni() {
        return fechaIni;
    }

    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    public boolean getMensaje() {
        return mensaje;
    }

    public void setMensaje(boolean mensaje) {
        this.mensaje = mensaje;
    }

    public Cita getCita() {
        return cita;
    }

    public void setCita(Cita cita) {
        this.cita = cita;
    }

    public Cita getCita1() {
        return cita1;
    }

    public void setCita1(Cita cita1) {
        this.cita1 = cita1;
    }

    public CitaDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(CitaDelegate delegado) {
        this.delegado = delegado;
    }

    public List getListaDisp() {
        return listaDisp;
    }

    public void setListaDisp(List listaDisp) {
        this.listaDisp = listaDisp;
    }

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public PreInscripcionDelegate getDelegadoPre() {
        return delegadoPre;
    }

    public void setDelegadoPre(PreInscripcionDelegate delegadoPre) {
        this.delegadoPre = delegadoPre;
    }

    public Preinscripcion getPreinscripcion() {
        return preinscripcion;
    }

    public void setPreinscripcion(Preinscripcion preinscripcion) {
        this.preinscripcion = preinscripcion;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public PersonaNaturalDelegate getDelegadoNatural() {
        return delegadoNatural;
    }

    public void setDelegadoNatural(PersonaNaturalDelegate delegadoNatural) {
        this.delegadoNatural = delegadoNatural;
    }

    public PersonaNatural getPerNatural() {
        return perNatural;
    }

    public void setPerNatural(PersonaNatural perNatural) {
        this.perNatural = perNatural;
    }

    public EstadoCita getEstado() {
        return estado;
    }

    public void setEstado(EstadoCita estado) {
        this.estado = estado;
    }

    public Cita buscaPorCodigo(Integer codigo){

        return delegado.find(codigo);
    }

    //listamos la citas Reservadas
    public List<Cita> getListaCitaRes(){

        return delegado.listaReservadas();
    }

    //ATENDER CITA

    public String atenderCita(){

        estado.setEciCodigo(3);
        cita.setEstado(estado);
        delegado.edit(cita);
        cita = new Cita();
        mostrarMensaje("INFO: ", "La Cita fue atendida satisfactoriamente...", FacesMessage.SEVERITY_INFO);
        return null;
    }

    public String nuevo(){
        
        cita = new Cita();
        return "ir_a_nuevo";
    }

    public String editar(){

        delegado.edit(cita);
        cita = new Cita();
        mostrarMensaje("INFO: ", "Cita actualizada satisfactoriamente...", FacesMessage.SEVERITY_INFO);
        return "ir_a_listar";
    }

    public String grabar(){

       Cita citaAnterior = new Cita();

       if(cita.getCitFecha() != null && cita.getCithoraInicio() != null){
          citaAnterior = delegado.buscaCitaFechaYHora(cita.getCitFecha(), cita.getCithoraInicio());

          if(citaAnterior!=null){
               cita = new Cita();
               mensaje = true;
               mostrarMensaje("ADVERTENCIA: ", "La cita se encuentra registrada", FacesMessage.SEVERITY_WARN);
          }else{
                cita.setCitfechaRegistro(new Date());
                cita.setCitcodigoProg(1);
                estado.setEciCodigo(1);
                cita.setEstado(estado);
                delegado.create(cita);
                cita = new Cita();
                mensaje = false;
                mostrarMensaje("INFO: ", "Cita registrada satisfactoriamente...", FacesMessage.SEVERITY_INFO);
                }
       }else{
           cita = new Cita();
           mensaje = true;
           mostrarMensaje("ADVERTENCIA: ", "La cita se encuentra registrada", FacesMessage.SEVERITY_WARN);
       }
        return null;
    }

    public String eliminar(){

        delegado.remove(cita);
        cita = new Cita();
        return null;
    }

    public String buscaColegiado(){

       try{
        perNatural = delegadoNatural.buscarXDni(dni);
        preinscripcion = delegadoPre.buscaPreInscripcion(perNatural.getSolCodigo());
        cita1 = delegado.buscaCita(preinscripcion.getPreCodigo());
        return null;
        
       }catch(Exception ex){
           return null;
       }
    }


    public List<Cita> listaDisponibles(){

        listaDisp = null;
        return listaDisp = delegado.listaDisponibles();
    }

    public String listar(){

        listaDisponibles();
        return null;
    }    

    public String actualizaCita(){

           estado.setEciCodigo(1);
           cita1.setEstado(estado);
           cita1.setPreCodigo(null);
           cita1.setCitcodigoProg(2);
           delegado.edit(cita1);
           return null;
    }


    public String cambiaCita(){
       try{
            actualizaCita();
            estado.setEciCodigo(2);
            cita.setEstado(estado);
            cita.setPreCodigo(preinscripcion);
            cita.setCitcodigoProg(2);
            delegado.edit(cita);
            listaDisp =  null;
            cita1 = null;
            dni = null;
            perNatural = new PersonaNatural();
            cita = new Cita();
            mostrarMensaje("INFO: ", "Se ha cambiado la cita satisfactoriamente...", FacesMessage.SEVERITY_INFO);
            return null;
       }catch(Exception e){
           System.out.println("error"+e.getMessage());
           mostrarMensaje("ADVERTENCIA: ", "No se pudo cambiar la fecha de cita...", FacesMessage.SEVERITY_WARN);
           return null;
       }
    }

    public String buscaCitaPorDNI(){

        try{
            cita = new Cita();
            cita = delegado.buscaCitaXDNI(dni);
            if(cita != null){
               dni= null;
               return null;
            }else{
                noHallado = true;
                mostrarMensaje("ADVERTENCIA: ", "La persona no tiene cita reservada", FacesMessage.SEVERITY_WARN);
                return null;
            }

       }catch(Exception ex){
            
            return null;
        }
    }

    public String cerrarVentana(){

        inicializa();
        return null;
    }

    public List<Cita> getlistaCita(){           

           listaPorFechas = delegado.findAll();
           return listaPorFechas;
      
    }

    public List<Cita> listaPorFecha(){

        listaPorFechas = new ArrayList<Cita>();
        return listaPorFechas = delegado.listaCitasPorFecha(fecha1, fecha2);        
    }
    
    public String listarPorFecha(){

        activo = false;
        listaPorFecha();
        if(listaPorFechas.size()>0){
            activo = true;
        }
        fechaIni = fecha1;
        fechaFin = fecha2;
        fecha1 = null;
        fecha2 = null;
        return null;
    }

    public String cancelar(){

        cita = new Cita();
        mensaje = false;
        activo = false;
        return "ir_a_listar";
    }
    
    public String terminar(){
        
        inicializa();
        return null;
    }

    public String inicializa(){

         colegiado = new Colegiado();
         perNatural = new PersonaNatural();
         persona = new PersonaNatural();
         preinscripcion = new Preinscripcion();
         cita = new Cita();
         cita1 = new Cita();
         cita2 = new ArrayList<Cita>();
         estado = new EstadoCita();

         mensaje = false;
         activo = false;
         listaPorFechas = new ArrayList<Cita>();
         noHallado = false;
         dni = "";
         return "";

    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }


}
